package br.com.truta.bd.dao;

import static br.com.truta.bd.DBUtils.close;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.truta.bd.ConnectionFactory;
import br.com.truta.bd.DaoException;
import br.com.truta.model.Despesa;
import br.com.truta.util.Constantes;

public class DespesaDAO {

	private DespesaDAO() {
		super();
	}
	


	public static boolean insereDespesa(Despesa despesa) throws DaoException {
		PreparedStatement stmt = null;
		Connection con = null;
		boolean retorno = false;

		try {
			// Abre conexao com o BD User
			con = ConnectionFactory.getLocalMySQLConnection();

			//Prepara o Statement
			stmt = con.prepareStatement(Constantes.SQL_INSET_DESPESA);

			//usuario, senha, nome, sobrenome, email
			stmt.setString(1, despesa.getNome());
			stmt.setInt(2, despesa.getIdTipoDespesa());
			stmt.setInt(3, despesa.getIdUsuario());
			
			stmt.executeUpdate();

			retorno = true;
		} catch (Exception e) {
			retorno = false;
			throw new DaoException("Erro ao insereTipoDespesa", e);
		} finally {
			close(stmt, con);
		}
		return retorno;
	}

	public static List<Despesa> buscaDespesa(int idUsuario) throws DaoException {
		PreparedStatement stmt = null;
		Connection con = null;
		ResultSet rs = null;
		
		List<Despesa> listaDespesa = new ArrayList<Despesa>();

		try {

			// faz a conexao com o BD
			con = ConnectionFactory.getLocalMySQLConnection();
			stmt = con.prepareStatement(Constantes.SQL_SELECT_DESPESA);
			stmt.setInt(1, idUsuario);

			rs = stmt.executeQuery();
			
			Despesa despesa = null;

			while (rs.next()) {
				despesa = new Despesa();
				despesa.setId(rs.getInt("ID"));
				despesa.setNome(rs.getString("NOME"));
				despesa.setIdTipoDespesa(rs.getInt("ID_USUARIO"));
				despesa.setIdUsuario(rs.getInt("ID_USUARIO"));
				
				listaDespesa.add(despesa);
				
			}

		} catch (Exception e) {
			throw new DaoException("Erro em buscaDespesa ", e);
		} finally {
			close(rs, stmt, con);
		}
		
		return listaDespesa;
	}
}
